package com.bbva.kyfb.servicios.host;

import com.bbva.jee.arq.spring.core.host.ExcepcionConfiguracion;
import com.bbva.jee.arq.spring.core.host.descriptor.DescriptorMensaje;
import com.bbva.jee.arq.spring.core.host.protocolo.ExcepcionProtocolo;
import com.bbva.jee.arq.spring.core.host.protocolo.ExcepcionRespuestaHost;
import com.bbva.jee.arq.spring.core.host.protocolo.otma.CabeceraOtma;
import com.bbva.jee.arq.spring.core.host.protocolo.otma.CabeceraOtmaAA01;
import com.bbva.jee.arq.spring.core.host.protocolo.otma.ManejadorProtocoloOtma;
import com.bbva.jee.arq.spring.core.host.protocolo.otma.MensajeOtma;

public class ManejadorProtocoloOtmaKYFB extends ManejadorProtocoloOtma {

	/** The Constant LOG. */
	//private static final I18nLog LOG = I18nLogFactory.getLogI18n(ManejadorProtocoloOtmaKYFB.class, ConstantesLog.MENSAJES_HOST);

	/** The Constant CODIGO_RETORNO_OK. */
	private static final String CODIGO_RETORNO_OK = "00";

	/** The Constant CODIGO_RETORNO_AVISO. */
	private static final String CODIGO_RETORNO_AVISO = "04";


	@Override
	protected <R> R procesarMensajeRespuesta(final DescriptorMensaje<R> descriptorRespuesta, final MensajeOtma<R> mensajeRespuesta) throws ExcepcionConfiguracion, ExcepcionProtocolo {
		final CabeceraOtma cabeceraRespuesta = mensajeRespuesta.getCabecera();
		final CabeceraOtmaAA01 cabeceraRespuestaAA01 = (CabeceraOtmaAA01) cabeceraRespuesta;

		final String codigoRetorno = cabeceraRespuestaAA01.getCodigoRetorno();
		final String codigoError = cabeceraRespuestaAA01.getCodigoError();
		final String descripcionError = cabeceraRespuestaAA01.getDescripcionError();
		final int tipoSalidaDatos = cabeceraRespuestaAA01.getTipoSalidaDatos();

		final R resp;

		if ( TIPO_SALIDA_DATOS_NO_CAMPOS == tipoSalidaDatos ) {
			// F = 0
			if ( CODIGO_RETORNO_OK.equals(codigoRetorno) ||
					// CR = 0
					CODIGO_RETORNO_AVISO.equals(codigoRetorno) &&
					// CR = 4
					descriptorRespuesta.getDescriptoresCabecera().size() == 0) {
				// retrocompatiblidad: los beans de respuesta anteriores a 1.7 nunca tienen cabeceras
				resp = null;
			} else {
				// CR = 6, 8, 12
				throw new ExcepcionRespuestaHost(codigoRetorno, codigoError, descripcionError);
			}
		} else {
			resp = mensajeRespuesta.getMensajeAplicacion();
		}

		//Bueno
		//59J

		return resp;
	}
}
